package com.bryant.demo05.ui.home


import android.content.Context
import android.view.View
import android.view.ViewGroup
import com.google.android.material.bottomsheet.BottomSheetDialog
import android.view.WindowManager.LayoutParams
import androidx.recyclerview.widget.GridLayoutManager
import com.bryant.demo05.R
import com.bryant.demo05.bean.ChangeCityBean
import com.bryant.demo05.databinding.LayoutDialogChangeCityBinding
import com.bryant.demo05.event.ChangeCityClickEvent
import com.bryant.demo05.utils.GridSpacingItemDecoration
import com.bryant.demo05.utils.WeatherUtils
import com.google.android.material.bottomsheet.BottomSheetBehavior
import org.greenrobot.eventbus.EventBus

class ChangeCityDialog(
    private val mContext: Context,
    theme: Int
) : BottomSheetDialog(mContext,  theme) {

    private lateinit var binding: LayoutDialogChangeCityBinding

    init {
        initContentView()
    }

    /**
     * 初始化布局
     */
    fun initContentView() {
        // 使用LayoutInflater将LayoutDialogChangeCityBinding绑定到当前布局中
        binding = LayoutDialogChangeCityBinding.inflate(layoutInflater)
        // 将绑定的根视图设置为对话框的内容视图
        setContentView(binding.root)
        // 为关闭按钮ivCloseDialog设置点击监听器，点击时关闭对话框
        binding.ivCloseDialog.setOnClickListener { this@ChangeCityDialog.dismiss() }

        if (window != null) {
            // 添加透明状态栏标志，使内容可以延伸到状态栏区域
            window?.addFlags(LayoutParams.FLAG_TRANSLUCENT_STATUS)
            // 设置对话框窗口的布局参数，宽度为匹配父布局，高度为包裹内容
            window?.setLayout(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
            )
        }

        // 查找BottomSheetDialog的design_bottom_sheet视图，这是Material Design中的一个标准ID
        val view = delegate.findViewById<View>(com.google.android.material.R.id.design_bottom_sheet)
        // 设置视图的背景颜色为透明，使对话框底部区域变为透明
        view?.setBackgroundColor(context.resources.getColor(R.color.transparent, null))


        // 获取binding.root的布局参数
        val layoutParams = binding.root.layoutParams
        // 设置宽度为MATCH_PARENT，表示匹配父容器的宽度
        layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT
        // 设置高度为WRAP_CONTENT，表示根据内容自动调整高度
        layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT
        // 将修改后的布局参数重新赋值给binding.root
        binding.root.layoutParams = layoutParams

        // 使用post方法确保视图已经完成布局后再执行以下操作
        binding.root.post {
            // 查找design_bottom_sheet视图，该视图为BottomSheetDialog的标准ID
            val tempView = findViewById<View>(com.google.android.material.R.id.design_bottom_sheet)
            // 如果tempView不为空，则继续配置BottomSheetBehavior
            if (tempView != null) {
                // 获取与tempView关联的BottomSheetBehavior对象
                val behavior = BottomSheetBehavior.from(tempView)
                // 禁用拖动手势，使用户无法通过手势关闭或移动BottomSheet
                behavior.isDraggable = false
            }
        }
        // 设置RecyclerView的布局管理器为GridLayoutManager，每行显示3列
        binding.rvCityList.layoutManager = GridLayoutManager(mContext, 3)
        // 添加网格间距装饰器，用于设置每个网格之间的间距
        binding.rvCityList.addItemDecoration(
            GridSpacingItemDecoration(
                3, // 设置列数为3
                WeatherUtils.dip2px(mContext, 16f), // 将16dp转换为像素值作为间距
                false // 不包含边缘的间距
            )
        )


        // 创建CityListAdapter适配器实例
        var adapter = CityListAdapter()

        // 设置条目点击事件监听器
        adapter.setOnItemClickListener { adapter, _, position ->
            // 点击城市
            // 这里我们第一个必定显示当前城市，所以把第一个的点击事件屏蔽下
            if (position == 0) {
                // 如果是第一个条目(position=0)，直接返回不处理点击事件
                return@setOnItemClickListener
            }
            // 从适配器中获取对应位置的数据对象ChangeCityBean
            var bean = adapter.getItem(position) as ChangeCityBean
            // 使用EventBus发送ChangeCityClickEvent事件，携带点击的城市数据
            EventBus.getDefault().post(ChangeCityClickEvent(bean))
            // 关闭当前对话框
            dismiss()
        }

        // 将配置好的适配器设置给RecyclerView
        binding.rvCityList.adapter = adapter

    }
    /**
     * 刷新城市列表
     */
    fun refreshCityList(list: List<ChangeCityBean>){
        if (list.isNotEmpty()) {
            val adapter = binding.rvCityList.adapter as CityListAdapter
            adapter.submitList(list)
        }
    }
}